<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8" />
    <title>dependency graph</title>
    <style>
      .node:active path,
      .node:hover path,
      .node.current path,
      .node:active polygon,
      .node:hover polygon,
      .node.current polygon
       {
        stroke: fuchsia;
        stroke-width: 2;
      }
      .edge:active path,
      .edge:hover path,
      .edge.current path,
      .edge:active ellipse,
      .edge:hover ellipse,
      .edge.current ellipse {
        stroke: fuchsia;
        stroke-width: 3;
        stroke-opacity: 1;
      }
      .edge:active polygon,
      .edge:hover polygon,
      .edge.current polygon {
        stroke: fuchsia;
        stroke-width: 3;
        fill: fuchsia;
        stroke-opacity: 1;
        fill-opacity: 1;
      }
      .edge:active text,
      .edge:hover text {
        fill: fuchsia;
      }
      .cluster path {
        stroke-width: 3;
      }
      .cluster:active path,
      .cluster:hover path {
        fill: #ffff0011;
      }
    </style>
  </head>
  <body>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.47.1 (20210417.1919)
 -->
<!-- Title: dependency&#45;cruiser output Pages: 1 -->
<svg width="413pt" height="332pt"
 viewBox="0.00 0.00 412.60 332.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 328)">
<title>dependency&#45;cruiser output</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-328 408.6,-328 408.6,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_src</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M20,-8C20,-8 384.6,-8 384.6,-8 390.6,-8 396.6,-14 396.6,-20 396.6,-20 396.6,-286 396.6,-286 396.6,-292 390.6,-298 384.6,-298 384.6,-298 20,-298 20,-298 14,-298 8,-292 8,-286 8,-286 8,-20 8,-20 8,-14 14,-8 20,-8"/>
<text text-anchor="middle" x="202.3" y="-286.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">src</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_src/parse</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M182.8,-16C182.8,-16 293.6,-16 293.6,-16 299.6,-16 305.6,-22 305.6,-28 305.6,-28 305.6,-86 305.6,-86 305.6,-92 299.6,-98 293.6,-98 293.6,-98 182.8,-98 182.8,-98 176.8,-98 170.8,-92 170.8,-86 170.8,-86 170.8,-28 170.8,-28 170.8,-22 176.8,-16 182.8,-16"/>
<text text-anchor="middle" x="238.2" y="-86.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">parse</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_src/render</title>
<path fill="#ffffff" stroke="black" stroke-width="2" d="M28,-106C28,-106 203.6,-106 203.6,-106 209.6,-106 215.6,-112 215.6,-118 215.6,-118 215.6,-234 215.6,-234 215.6,-240 209.6,-246 203.6,-246 203.6,-246 28,-246 28,-246 22,-246 16,-240 16,-234 16,-234 16,-118 16,-118 16,-112 22,-106 28,-106"/>
<text text-anchor="middle" x="115.8" y="-234.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">render</text>
</g>
<!-- . -->
<g id="node1" class="node">
<title>.</title>
<g id="a_node1"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/." xlink:title=".">
<polygon fill="#ffffcc" stroke="black" points="388.1,-324 336.1,-324 334.1,-322 334.1,-306 386.1,-306 388.1,-308 388.1,-324"/>
<polyline fill="none" stroke="black" points="386.1,-322 334.1,-322 "/>
<polyline fill="none" stroke="black" points="386.1,-322 386.1,-306 "/>
<polyline fill="none" stroke="black" points="386.1,-322 388.1,-324 "/>
<text text-anchor="middle" x="361.1" y="-312.8" font-family="Helvetica,sans-Serif" font-size="9.00">.</text>
</a>
</g>
</g>
<!-- bin -->
<g id="node2" class="node">
<title>bin</title>
<g id="a_node2"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/bin" xlink:title="bin">
<polygon fill="#ffffcc" stroke="black" points="117.6,-324 65.6,-324 63.6,-322 63.6,-306 115.6,-306 117.6,-308 117.6,-324"/>
<polyline fill="none" stroke="black" points="115.6,-322 63.6,-322 "/>
<polyline fill="none" stroke="black" points="115.6,-322 115.6,-306 "/>
<polyline fill="none" stroke="black" points="115.6,-322 117.6,-324 "/>
<text text-anchor="middle" x="90.6" y="-312.8" font-family="Helvetica,sans-Serif" font-size="9.00">bin</text>
</a>
</g>
</g>
<!-- bin&#45;&gt;. -->
<g id="edge1" class="edge">
<title>bin&#45;&gt;.</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M117.78,-318C117.78,-318 327.94,-318 327.94,-318"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="327.94,-320.1 333.94,-318 327.94,-315.9 327.94,-320.1"/>
</g>
<!-- src/cli -->
<g id="node3" class="node">
<title>src/cli</title>
<g id="a_node3"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/src/cli" xlink:title="cli">
<polygon fill="#ccffcc" stroke="black" points="207.6,-272 155.6,-272 153.6,-270 153.6,-254 205.6,-254 207.6,-256 207.6,-272"/>
<polyline fill="none" stroke="black" points="205.6,-270 153.6,-270 "/>
<polyline fill="none" stroke="black" points="205.6,-270 205.6,-254 "/>
<polyline fill="none" stroke="black" points="205.6,-270 207.6,-272 "/>
<text text-anchor="middle" x="180.6" y="-260.8" font-family="Helvetica,sans-Serif" font-size="9.00">cli</text>
</a>
</g>
</g>
<!-- bin&#45;&gt;src/cli -->
<g id="edge2" class="edge">
<title>bin&#45;&gt;src/cli</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M90.6,-305.94C90.6,-291.04 90.6,-263 90.6,-263 90.6,-263 147.6,-263 147.6,-263"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="147.6,-265.1 153.6,-263 147.6,-260.9 147.6,-265.1"/>
</g>
<!-- src -->
<!-- src/cli&#45;&gt;src -->
<g id="edge7" class="edge">
<title>src/cli&#45;&gt;src</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M207.9,-263C234.71,-263 271.6,-263 271.6,-263 271.6,-263 271.6,-167.79 271.6,-167.79"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="273.7,-167.79 271.6,-161.79 269.5,-167.79 273.7,-167.79"/>
</g>
<!-- src&#45;&gt;. -->
<g id="edge3" class="edge">
<title>src&#45;&gt;.</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M272.44,-159.4C276.44,-159.4 285.6,-159.4 285.6,-159.4 285.6,-159.4 285.6,-312 285.6,-312 285.6,-312 327.84,-312 327.84,-312"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="327.84,-314.1 333.84,-312 327.84,-309.9 327.84,-314.1"/>
</g>
<!-- src/parse -->
<!-- src&#45;&gt;src/parse -->
<g id="edge4" class="edge">
<title>src&#45;&gt;src/parse</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M270.6,-157.97C270.6,-152.52 270.6,-138 270.6,-138 270.6,-138 195.6,-138 195.6,-138 195.6,-138 195.6,-62.4 195.6,-62.4 195.6,-62.4 188.44,-62.4 188.44,-62.4"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="188.44,-60.3 182.44,-62.4 188.44,-64.5 188.44,-60.3"/>
</g>
<!-- src/render -->
<!-- src&#45;&gt;src/render -->
<g id="edge5" class="edge">
<title>src&#45;&gt;src/render</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M271.6,-158.34C271.6,-148.03 271.6,-93 271.6,-93 271.6,-93 25.6,-93 25.6,-93 25.6,-93 25.6,-155.95 25.6,-155.95"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="23.5,-155.95 25.6,-161.95 27.7,-155.95 23.5,-155.95"/>
</g>
<!-- src/transform -->
<g id="node7" class="node">
<title>src/transform</title>
<g id="a_node7"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/src/transform" xlink:title="transform">
<polygon fill="#ffffcc" stroke="black" points="388.6,-169 335.6,-169 333.6,-167 333.6,-151 386.6,-151 388.6,-153 388.6,-169"/>
<polyline fill="none" stroke="black" points="386.6,-167 333.6,-167 "/>
<polyline fill="none" stroke="black" points="386.6,-167 386.6,-151 "/>
<polyline fill="none" stroke="black" points="386.6,-167 388.6,-169 "/>
<text text-anchor="middle" x="361.1" y="-157.8" font-family="Helvetica,sans-Serif" font-size="9.00">transform</text>
</a>
</g>
</g>
<!-- src&#45;&gt;src/transform -->
<g id="edge6" class="edge">
<title>src&#45;&gt;src/transform</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M272.6,-159.82C272.6,-159.02 272.6,-155.8 272.6,-155.8 272.6,-155.8 327.58,-155.8 327.58,-155.8"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="327.58,-157.9 333.58,-155.8 327.58,-153.7 327.58,-157.9"/>
</g>
<!-- src/parse&#45;&gt;src -->
<g id="edge8" class="edge">
<title>src/parse&#45;&gt;src</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M180.6,-65.01C180.6,-78.81 180.6,-159.1 180.6,-159.1 180.6,-159.1 263.04,-159.1 263.04,-159.1"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="263.04,-161.2 269.04,-159.1 263.04,-157 263.04,-161.2"/>
</g>
<!-- src/parse/scxml -->
<g id="node8" class="node">
<title>src/parse/scxml</title>
<g id="a_node8"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/src/parse/scxml" xlink:title="scxml">
<polygon fill="#ffccff" stroke="black" points="297.6,-42 245.6,-42 243.6,-40 243.6,-24 295.6,-24 297.6,-26 297.6,-42"/>
<polyline fill="none" stroke="black" points="295.6,-40 243.6,-40 "/>
<polyline fill="none" stroke="black" points="295.6,-40 295.6,-24 "/>
<polyline fill="none" stroke="black" points="295.6,-40 297.6,-42 "/>
<text text-anchor="middle" x="270.6" y="-30.8" font-family="Helvetica,sans-Serif" font-size="9.00">scxml</text>
</a>
</g>
</g>
<!-- src/parse&#45;&gt;src/parse/scxml -->
<g id="edge9" class="edge">
<title>src/parse&#45;&gt;src/parse/scxml</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M178.67,-63C174.03,-63 162.6,-63 162.6,-63 162.6,-63 162.6,-30 162.6,-30 162.6,-30 237.35,-30 237.35,-30"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="237.35,-32.1 243.35,-30 237.35,-27.9 237.35,-32.1"/>
</g>
<!-- src/parse/smcat -->
<g id="node9" class="node">
<title>src/parse/smcat</title>
<g id="a_node9"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/src/parse/smcat" xlink:title="smcat">
<polygon fill="#ffccff" stroke="black" points="297.6,-72 245.6,-72 243.6,-70 243.6,-54 295.6,-54 297.6,-56 297.6,-72"/>
<polyline fill="none" stroke="black" points="295.6,-70 243.6,-70 "/>
<polyline fill="none" stroke="black" points="295.6,-70 295.6,-54 "/>
<polyline fill="none" stroke="black" points="295.6,-70 297.6,-72 "/>
<text text-anchor="middle" x="270.6" y="-60.8" font-family="Helvetica,sans-Serif" font-size="9.00">smcat</text>
</a>
</g>
</g>
<!-- src/parse&#45;&gt;src/parse/smcat -->
<g id="edge10" class="edge">
<title>src/parse&#45;&gt;src/parse/smcat</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M182.48,-63.6C182.48,-63.6 237.48,-63.6 237.48,-63.6"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="237.48,-65.7 243.48,-63.6 237.48,-61.5 237.48,-65.7"/>
</g>
<!-- src/render/dot -->
<g id="node10" class="node">
<title>src/render/dot</title>
<g id="a_node10"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/src/render/dot" xlink:title="dot">
<polygon fill="#ccccff" stroke="black" points="207.6,-180 155.6,-180 153.6,-178 153.6,-162 205.6,-162 207.6,-164 207.6,-180"/>
<polyline fill="none" stroke="black" points="205.6,-178 153.6,-178 "/>
<polyline fill="none" stroke="black" points="205.6,-178 205.6,-162 "/>
<polyline fill="none" stroke="black" points="205.6,-178 207.6,-180 "/>
<text text-anchor="middle" x="180.6" y="-168.8" font-family="Helvetica,sans-Serif" font-size="9.00">dot</text>
</a>
</g>
</g>
<!-- src/render&#45;&gt;src/render/dot -->
<g id="edge14" class="edge">
<title>src/render&#45;&gt;src/render/dot</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M23.75,-164C18.79,-164 6.6,-164 6.6,-164 6.6,-164 6.6,-172.9 6.6,-172.9 6.6,-172.9 147.41,-172.9 147.41,-172.9"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="147.41,-175 153.41,-172.9 147.41,-170.8 147.41,-175"/>
</g>
<!-- src/render/scjson -->
<g id="node11" class="node">
<title>src/render/scjson</title>
<g id="a_node11"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/src/render/scjson" xlink:title="scjson">
<polygon fill="#ccccff" stroke="black" points="207.6,-210 155.6,-210 153.6,-208 153.6,-192 205.6,-192 207.6,-194 207.6,-210"/>
<polyline fill="none" stroke="black" points="205.6,-208 153.6,-208 "/>
<polyline fill="none" stroke="black" points="205.6,-208 205.6,-192 "/>
<polyline fill="none" stroke="black" points="205.6,-208 207.6,-210 "/>
<text text-anchor="middle" x="180.6" y="-198.8" font-family="Helvetica,sans-Serif" font-size="9.00">scjson</text>
</a>
</g>
</g>
<!-- src/render&#45;&gt;src/render/scjson -->
<g id="edge15" class="edge">
<title>src/render&#45;&gt;src/render/scjson</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M27.71,-164.6C42.29,-164.6 135.6,-164.6 135.6,-164.6 135.6,-164.6 135.6,-196.67 135.6,-196.67 135.6,-196.67 147.39,-196.67 147.39,-196.67"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="147.39,-198.77 153.39,-196.67 147.39,-194.57 147.39,-198.77"/>
</g>
<!-- src/render/scxml -->
<g id="node12" class="node">
<title>src/render/scxml</title>
<g id="a_node12"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/src/render/scxml" xlink:title="scxml">
<polygon fill="#ccccff" stroke="black" points="117.6,-206 65.6,-206 63.6,-204 63.6,-188 115.6,-188 117.6,-190 117.6,-206"/>
<polyline fill="none" stroke="black" points="115.6,-204 63.6,-204 "/>
<polyline fill="none" stroke="black" points="115.6,-204 115.6,-188 "/>
<polyline fill="none" stroke="black" points="115.6,-204 117.6,-206 "/>
<text text-anchor="middle" x="90.6" y="-194.8" font-family="Helvetica,sans-Serif" font-size="9.00">scxml</text>
</a>
</g>
</g>
<!-- src/render&#45;&gt;src/render/scxml -->
<g id="edge16" class="edge">
<title>src/render&#45;&gt;src/render/scxml</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M26.6,-165.77C26.6,-172.63 26.6,-197 26.6,-197 26.6,-197 57.46,-197 57.46,-197"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="57.46,-199.1 63.46,-197 57.46,-194.9 57.46,-199.1"/>
</g>
<!-- src/render/smcat -->
<g id="node13" class="node">
<title>src/render/smcat</title>
<g id="a_node13"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/src/render/smcat" xlink:title="smcat">
<polygon fill="#ccccff" stroke="black" points="117.6,-132 65.6,-132 63.6,-130 63.6,-114 115.6,-114 117.6,-116 117.6,-132"/>
<polyline fill="none" stroke="black" points="115.6,-130 63.6,-130 "/>
<polyline fill="none" stroke="black" points="115.6,-130 115.6,-114 "/>
<polyline fill="none" stroke="black" points="115.6,-130 117.6,-132 "/>
<text text-anchor="middle" x="90.6" y="-120.8" font-family="Helvetica,sans-Serif" font-size="9.00">smcat</text>
</a>
</g>
</g>
<!-- src/render&#45;&gt;src/render/smcat -->
<g id="edge17" class="edge">
<title>src/render&#45;&gt;src/render/smcat</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M27.63,-163.4C32.53,-163.4 45.6,-163.4 45.6,-163.4 45.6,-163.4 45.6,-123 45.6,-123 45.6,-123 57.39,-123 57.39,-123"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="57.39,-125.1 63.39,-123 57.39,-120.9 57.39,-125.1"/>
</g>
<!-- src/render/vector -->
<g id="node14" class="node">
<title>src/render/vector</title>
<g id="a_node14"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/develop/src/render/vector" xlink:title="vector">
<polygon fill="#ccccff" stroke="black" points="117.6,-162 65.6,-162 63.6,-160 63.6,-144 115.6,-144 117.6,-146 117.6,-162"/>
<polyline fill="none" stroke="black" points="115.6,-160 63.6,-160 "/>
<polyline fill="none" stroke="black" points="115.6,-160 115.6,-144 "/>
<polyline fill="none" stroke="black" points="115.6,-160 117.6,-162 "/>
<text text-anchor="middle" x="90.6" y="-150.8" font-family="Helvetica,sans-Serif" font-size="9.00">vector</text>
</a>
</g>
</g>
<!-- src/render&#45;&gt;src/render/vector -->
<g id="edge18" class="edge">
<title>src/render&#45;&gt;src/render/vector</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M26.6,-162.28C26.6,-159.19 26.6,-153 26.6,-153 26.6,-153 57.46,-153 57.46,-153"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="57.46,-155.1 63.46,-153 57.46,-150.9 57.46,-155.1"/>
</g>
<!-- src/transform&#45;&gt;src -->
<g id="edge24" class="edge">
<title>src/transform&#45;&gt;src</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M333.46,-160.6C333.46,-160.6 278.62,-160.6 278.62,-160.6"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="278.62,-158.5 272.62,-160.6 278.62,-162.7 278.62,-158.5"/>
</g>
<!-- src/parse/scxml&#45;&gt;src/parse -->
<g id="edge12" class="edge">
<title>src/parse/scxml&#45;&gt;src/parse</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M243.6,-36C217.09,-36 180.6,-36 180.6,-36 180.6,-36 180.6,-54.88 180.6,-54.88"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="178.5,-54.88 180.6,-60.88 182.7,-54.88 178.5,-54.88"/>
</g>
<!-- src/parse/scxml&#45;&gt;src/transform -->
<g id="edge11" class="edge">
<title>src/parse/scxml&#45;&gt;src/transform</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M297.9,-33C324.71,-33 361.6,-33 361.6,-33 361.6,-33 361.6,-144.87 361.6,-144.87"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="359.5,-144.87 361.6,-150.87 363.7,-144.87 359.5,-144.87"/>
</g>
<!-- src/parse/smcat&#45;&gt;src/parse -->
<g id="edge13" class="edge">
<title>src/parse/smcat&#45;&gt;src/parse</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M243.41,-68.4C217.24,-68.4 181.6,-68.4 181.6,-68.4 181.6,-68.4 181.6,-68.03 181.6,-68.03"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="183.7,-70.71 181.6,-64.71 179.5,-70.71 183.7,-70.71"/>
</g>
<!-- src/render/dot&#45;&gt;src -->
<g id="edge19" class="edge">
<title>src/render/dot&#45;&gt;src</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M207.6,-165.5C234.11,-165.5 270.6,-165.5 270.6,-165.5 270.6,-165.5 270.6,-165.17 270.6,-165.17"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="272.7,-168.24 270.6,-162.24 268.5,-168.24 272.7,-168.24"/>
</g>
<!-- src/render/scjson&#45;&gt;src -->
<g id="edge20" class="edge">
<title>src/render/scjson&#45;&gt;src</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M207.81,-201C217.29,-201 225.6,-201 225.6,-201 225.6,-201 225.6,-160 225.6,-160 225.6,-160 262.67,-160 262.67,-160"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="262.67,-162.1 268.67,-160 262.67,-157.9 262.67,-162.1"/>
</g>
<!-- src/render/scxml&#45;&gt;src/render/scjson -->
<g id="edge21" class="edge">
<title>src/render/scxml&#45;&gt;src/render/scjson</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M117.6,-201.33C117.6,-201.33 147.31,-201.33 147.31,-201.33"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="147.31,-203.43 153.31,-201.33 147.3,-199.23 147.31,-203.43"/>
</g>
<!-- src/render/vector&#45;&gt;src -->
<g id="edge22" class="edge">
<title>src/render/vector&#45;&gt;src</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M117.79,-153.4C167.86,-153.4 269.6,-153.4 269.6,-153.4 269.6,-153.4 269.6,-153.91 269.6,-153.91"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="267.5,-152.47 269.6,-158.47 271.7,-152.47 267.5,-152.47"/>
</g>
<!-- src/render/vector&#45;&gt;src/render/dot -->
<g id="edge23" class="edge">
<title>src/render/vector&#45;&gt;src/render/dot</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M117.68,-160.9C140.89,-160.9 170.6,-160.9 170.6,-160.9 170.6,-160.9 170.6,-160.99 170.6,-160.99"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="168.5,-155.83 170.6,-161.83 172.7,-155.83 168.5,-155.83"/>
</g>
</g>
</svg>
<script>document.body.onmouseover = getHighlightHandler();

function getHighlightHandler() {
  /** @type {string} */
  var currentHighlightedTitle;

  /** @type {NodeListOf<SVGGElement>} */
  var nodes = document.querySelectorAll(".node");
  /** @type {NodeListOf<SVGGElement>} */
  var edges = document.querySelectorAll(".edge");
  var title2ElementMap = new Title2ElementMap(edges, nodes);

  /** @param {MouseEvent} pMouseEvent */
  return function highlightHandler(pMouseEvent) {
    var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
    var closestTitleText = getTitleText(closestNodeOrEdge);

    if (!(currentHighlightedTitle === closestTitleText)) {
      title2ElementMap.get(currentHighlightedTitle).forEach(removeHighlight);
      title2ElementMap.get(closestTitleText).forEach(addHighlight);
      currentHighlightedTitle = closestTitleText;
    }
  };
}

/**
 *
 * @param {SVGGelement[]} pEdges
 * @param {SVGGElement[]} pNodes
 * @return {{get: (pTitleText:string) => SVGGElement[]}}
 */
function Title2ElementMap(pEdges, pNodes) {
  /* {{[key: string]: SVGGElement[]}} */
  var elementMap = buildMap(pEdges, pNodes);

  /**
   * @param {NodeListOf<SVGGElement>} pEdges
   * @param {NodeListOf<SVGGElement>} pNodes
   * @return {{[key: string]: SVGGElement[]}}
   */
  function buildMap(pEdges, pNodes) {
    var title2NodeMap = buildTitle2NodeMap(pNodes);

    return nodeListToArray(pEdges).reduce(addEdgeToMap(title2NodeMap), {});
  }
  /**
   * @param {NodeListOf<SVGGElement>} pNodes
   * @return {{[key: string]: SVGGElement}}
   */
  function buildTitle2NodeMap(pNodes) {
    return nodeListToArray(pNodes).reduce(addNodeToMap, {});
  }

  function addNodeToMap(pMap, pNode) {
    var titleText = getTitleText(pNode);

    if (titleText) {
      pMap[titleText] = pNode;
    }
    return pMap;
  }

  function addEdgeToMap(pNodeMap) {
    return function (pEdgeMap, pEdge) {
      /** @type {string} */
      var titleText = getTitleText(pEdge);

      if (titleText) {
        var edge = pryEdgeFromTitle(titleText);

        pEdgeMap[titleText] = [pNodeMap[edge.from], pNodeMap[edge.to]];
        (pEdgeMap[edge.from] || (pEdgeMap[edge.from] = [])).push(pEdge);
        (pEdgeMap[edge.to] || (pEdgeMap[edge.to] = [])).push(pEdge);
      }
      return pEdgeMap;
    };
  }

  /**
   *
   * @param {string} pString
   * @return {{from?: string; to?:string;}}
   */
  function pryEdgeFromTitle(pString) {
    var nodeNames = pString.split(/\s*->\s*/);

    return {
      from: nodeNames.shift(),
      to: nodeNames.shift(),
    };
  }
  /**
   *
   * @param {string} pTitleText
   * @return {SVGGElement[]}
   */
  function get(pTitleText) {
    return (pTitleText && elementMap[pTitleText]) || [];
  }
  return {
    get: get,
  };
}

/**
 * @param {SVGGElement} pGElement
 * @return {string?}
 */
function getTitleText(pGElement) {
  /** @type {SVGTitleElement} */
  var title = pGElement && pGElement.querySelector("title");
  /** @type {string} */
  var titleText = title && title.textContent;

  if (titleText) {
    titleText = titleText.trim();
  }
  return titleText;
}

/**
 * @param {NodeListOf<Element>} pNodeList
 * @return {Element[]}
 */
function nodeListToArray(pNodeList) {
  var lReturnValue = [];

  pNodeList.forEach(function (pElement) {
    lReturnValue.push(pElement);
  });

  return lReturnValue;
}

/**
 * @param {SVGGElement} pGElement
 */
function removeHighlight(pGElement) {
  if (pGElement && pGElement.classList) {
    pGElement.classList.remove("current");
  }
}

/**
 * @param {SVGGElement} pGroup
 */
function addHighlight(pGroup) {
  if (pGroup && pGroup.classList) {
    pGroup.classList.add("current");
  }
}
</script>  </body>
</html>
